package code15.io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestFileCharacter {

	public static void main(String[] args) {
//		f1();
		
		t1("src/code15/io/a.txt");
	}

	private static void f1() {
		try (
				// 默认使用程序设置的字符集(UTF-8)
				Reader reader = new FileReader("src/code15/io/a.txt");
				// 如果文件不存在会自动创建对应文件
				// 如果为 true, 会在原内容后追加新的内容
				Writer writer = new FileWriter("src/code15/io/a2.txt", false);
				) {
			// 一次读一个字符, 返回值类型为 int, 如果读取到文件末尾, 返回 -1
			//int read = reader.read();
			//char[] cbuf = new char[5];
			// 一次读取部分字符并存入指定数组, 返回 实际读取到的 字符数量, 如果 读取到文件的末尾, 返回 -1
			//int len = reader.read(cbuf);
			
			char[] cbuf = new char[5];
			int len = -1;
			while ( (len = reader.read(cbuf)) != -1 ) {
				System.out.print(new String(cbuf, 0, len));
				
				// 一次写一个字符
				writer.write('x');
				
				// 一次写多个字符
				//writer.write("hello".toCharArray());
				// 一次写一个字符串
				//writer.write("hello");
				
				// 写出指定部分的字符
				writer.write(cbuf, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void t1(String path) {
		// 统计指定文本文件中出现的字符种类，以及该字符出现的次数
		Map<Character, Integer> map = new HashMap<Character, Integer>();
		
		try (
				FileReader reader = new FileReader(path);
				) {
			int m = -1;
			while ( (m = reader.read()) != -1 ) {
				// 判断当前读取到的字符
				char c = (char) m;
				// 判断该字符是否已被保存
//				if (map.containsKey(c)) {
//					// 获取上一次保存的 次数
//					Integer count = map.get(c);
//					map.put(c, count + 1);// 后续, +1
//				} else {
//					map.put(c, 1);// key 字符, value 次数, 第一次是 1
//				}
				map.put(c, map.containsKey(c) ? map.get(c)+1 : 1);
			}
			
//			System.out.println(map);
			Set<Character> keySet = map.keySet();
			for (Character key : keySet) {
				Integer count = map.get(key);
				System.out.println(key + " 出现 " + count + " 次");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}
